﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PSZT
{
    public partial class Form1 : Form
    {
        public List<Predykat> dostepnePredykaty = new List<Predykat> ();
        public Model model = new Model();
        //int counter = 1;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NowyPredykatDialog dlg = new NowyPredykatDialog();
            DialogResult dr = dlg.ShowDialog();
            if (dr == DialogResult.OK)
            {
                //listView1.Items.Insert(0, dlg.InformacjePredykatu.Nazwa);
                //listView1.Items[0].SubItems.Add(dlg.InformacjePredykatu.LiczbaArgumentow);
                dostepnePredykaty.Add(new Predykat(dlg.InformacjePredykatu.Nazwa, int.Parse(dlg.InformacjePredykatu.LiczbaArgumentow)));
                model.dostepnePredykaty = dostepnePredykaty;
                UpdateUI();
            }
        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {

        }

        private void listView1_SelectedIndexChanged_1(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //listView1.Items.Clear();
            dostepnePredykaty.Clear();
            model.usunWszystkieDostepnePredykaty();
            UpdateUI();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            NowaKlauzulaDialog dlg = new NowaKlauzulaDialog(model.dostepnePredykaty);
            DialogResult dr = new DialogResult();
            dr = dlg.ShowDialog();
            if (dr == DialogResult.OK)
            {
                model.baza.Add(dlg.nowaFormula);
                UpdateUI();
                //listView2.Items.Add(counter.ToString() + ". " + dlg.nowaFormula.ToString());
                //counter++;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            NowaKlauzulaDialog dlg = new NowaKlauzulaDialog(model.dostepnePredykaty);
            dlg.wylaczPrzyciskPrzeslanek();
            DialogResult dr = new DialogResult();
            dr = dlg.ShowDialog();
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                model.doUdowodnienia = dlg.nowaFormula;
                label1.Text = dlg.nowaFormula.ToString();
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            if (model.wnioskujWPrzod())
            {
                MessageBox.Show("Udalo sie");
            }
            else
            {
                MessageBox.Show("Nie udalo sie");
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (listView2.SelectedIndices.Count > 0)
            {
                int index = listView2.SelectedIndices[0];
                //listView2.Items.RemoveAt(index);
                model.baza.RemoveAt(index);
                UpdateUI();
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            button2.Enabled = checkBox1.Checked;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //dostepnePredykaty.Add(new Predykat("LATWY", 1));
            //dostepnePredykaty.Add(new Predykat("ZALICZY", 2));

            //Formula f1 = new Formula();
            //Predykat p1f1 = new Predykat("LATWY", 1);
            //p1f1.argumenty.Add("x");
            //f1.przeslanki.Add(p1f1);
            //Predykat kf1 = new Predykat("ZALICZY", 2);
            //kf1.argumenty.Add("y");
            //kf1.argumenty.Add("x");
            //f1.konkluzja = kf1;

            //Formula f2 = new Formula();
            //Predykat k1f2 = new Predykat("LATWY", 1);
            //k1f2.argumenty.Add("Analiza");
            //f2.konkluzja = k1f2;

            //Formula f3 = new Formula();
            //Predykat k1f3 = new Predykat("LATWY", 1);
            //k1f3.argumenty.Add("AISDI");
            //f3.konkluzja = k1f3;

            //model.baza.Add(f1);
            //model.baza.Add(f2);
            //model.baza.Add(f3);

            //Formula doUdow = new Formula();
            //doUdow.konkluzja = new Predykat("ZALICZY", 2);
            //doUdow.konkluzja.argumenty.Add("Ja");
            //doUdow.konkluzja.argumenty.Add("AISDI");

            //model.doUdowodnienia = doUdow;
        }

        private void button8_Click(object sender, EventArgs e)
        {
            FileDialog dialog = new SaveFileDialog();
            dialog.Filter = "baza wiedzy (*.xml)|*.xml";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(Model));
                System.IO.StreamWriter file = new System.IO.StreamWriter(dialog.FileName);
                writer.Serialize(file, model);
                file.Close();
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            FileDialog dialog = new OpenFileDialog();
            dialog.Filter = "baza wiedzy (*.xml)|*.xml";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(Model));
                System.IO.StreamReader file = new System.IO.StreamReader(dialog.FileName);
                model = reader.Deserialize(file) as Model;
                file.Close();
                UpdateUI();
            }
        }

        private void UpdateUI()
        {
            listView1.Items.Clear();
            listView2.Items.Clear();

            foreach (Predykat p in model.dostepnePredykaty)
            {
                ListViewItem predykatItem = new ListViewItem(p.nazwa);
                predykatItem.SubItems.Add(p.liczbaArgumentow.ToString());
                listView1.Items.Add(predykatItem);
            }

            foreach (Formula f in model.baza)
            {
                listView2.Items.Add(f.ToString());
            }


            listView1.Invalidate();
            listView2.Invalidate();



            //listView1.Items.Insert(0, dlg.InformacjePredykatu.Nazwa);
            //listView1.Items[0].SubItems.Add(dlg.InformacjePredykatu.LiczbaArgumentow);
            //dostepnePredykaty.Add(new Predykat(dlg.InformacjePredykatu.Nazwa, int.Parse(dlg.InformacjePredykatu.LiczbaArgumentow)));
            //model.dostepnePredykaty = dostepnePredykaty;
        }
    }
}
